# -*- coding:utf-8 -*-
__project__ = '远端库'
__file_name__ = '第十三次课程作业'
__author__ = "tcf"
__date__ = "2020/11/25 11:42"
__product_name = 'PyCharm'
# @FileName :第十三次课程作业.py
# code is far away from bugs with the god animal protecting


'''第一部分作业'''
# 1、创建一个对象后默认调用(A)
# A、__init__    B、__str__    C、__add__    D、__and__

# 2、类是对象的___抽象____、对象是类的___实例____.

# 3、对象是由___接口___、___实现____两部分构成.



# 4、创建学生类：
# 	类名：Student
# 	属性：name（姓名）、age（年龄）、sex（性别）

# 方法：
# 	def info(self) # 打印学生的姓名、年龄、性别
# 	def draw(self) # 打印”XX会画画呢”

# 描述：创建学生类，通过学生类创建一个学生对象，分别调用学生的info方法.

# 方法一、
# class Student(object):
#
#     def info(self):
#         print('姓名：', self.name)
#         print('年龄：', self.age)
#         print('性别：', self.sex)
#
#     def draw(self):
#         print(self.name, '会画画呢!')
#
# happy = Student()
# happy.name = '开心'
# happy.age = 18
# happy.sex = '女'
#
# happy.info()
# happy.draw()


# 方法二、
# class Student(object):
#
#     def info(self, name, age, sex):
#         print('姓名：', name)
#         print('年龄：', age)
#         print('性别：', sex)
#
#     def draw(self):
#         print(self.name, '会画画呢!')
#
# happy = Student()
# happy.info('开心', 18, '女')
# # happy.draw()    # 不调用这个方法



# 5、创建动物类：
# 	类名：animal
# 	属性(使用魔法方法实现)：name（姓名）、age（年龄）、color（颜色）

# 方法：
# 	def info(self) # 打印姓名、年龄、毛颜色
# 	def run（self）# 打印“XX会跑呢”
# 描述：创建动物类，通过动物类创建一个动物对象，分别调用动物的info和run方法.


# class animal(object):
#     def __init__(self, name, age, color):
#         self.name = name
#         self.age = age
#         self.color = color
#
#     def info(self):
#         print('姓名：', self.name)
#         print('年龄：', self.age)
#         print('颜色：', self.color)
#
#     def run(self):
#         print(self.name, '会跑呢')
#
# dog = animal('小白', 2, '白色')
# dog.info()
# dog.run()




'''第二部分作业'''

# 1、下列程序结果是__类A__销毁___.
# class A:
#
#     def __init__(self):
#         print("初始化")
#
#     def __del__(self):
#         print("销毁")
#
#     def __str__(self):
#         return "类A"
# a = A()
# print(a)




# 2. 下列程序执行结果__汪汪汪____.
# class Animal(object):
#
#     def shut(self):
#         print("动物在叫")
# class Dog(Animal):
#
#     def shut(self):
#         super().shut()
#         print("汪汪汪")
# dog = Dog()
# dog.shut()




# 3. 创建猫类：
# 	类名：Cat
# 	属性：无
# 描述：创建一个Cat类，通过Cat类创建一个对象cat，执行print(cat)输出“喵？喵？喵？”.

# class Cat(object):
#     def __str__(self):
#         return '喵？喵？喵？'
#
# cat = Cat()
# print(cat)




# 4.创建计算器类：
# 	类名：Calculator
# 	属性：number_1（数字一）、number_2（数字二）
# 方法：
# 	def __init__(self,number_1,number_2):
# 类的初始化方法
# 	def add(self) # 返回数字一加数字二的值
# 	def sub(self) # 返回数字一减去数字二的值
# 	def div(self) # 返回数字一除以数字二的值
# 	def mul(self) # 返回数字一乘以数字二的值
# 描述：创建计算器类，通过计算器类创建一个计算器对象，在创建对象时需要传入数字一和数字二，分别调用计算器的四种方法.

# class Calculator(object):
#     def __init__(self, number_1, number_2):
#         self.number_1 = number_1
#         self.number_2 = number_2
#
#     def print_info(self):
#         print('第一个数字是：', self.number_1)
#         print('第二个数字是：', self.number_2)
#
#     def add(self):
#         ret = self.number_1 + self.number_2
#         print('和是%d' % ret)
#
#     def sub(self):
#         ret = self.number_1 - self.number_2
#         print('差是%d' % ret)
#
#     def div(self):
#         ret = self.number_1 / self.number_2
#         print('除是%d' % ret)
#
#     def mul(self):
#         ret = self.number_1 * self.number_2
#         print('乘是%d' % ret)
#
#
# cal = Calculator(1.5, 2)    # 如何控制浮点型？？
# cal.print_info()
# cal.add()
# cal.sub()
# cal.div()
# cal.mul()







# 5.创建Cat和Dog类分别继承Animal类，分别重写shut和eat方法，
# 创建Cat类对象cat和Dog类对象dog，分别调用cat和dog的shut和eat方法

# class Animal:
#
#     def shut(self):
#         # 打印叫声
#         pass
#
#     def eat(self):
#         # 打印爱吃的食物
#         pass

# class animal(object):
#     def __init__(self, num1, num2):
#         self.dog1 = num1
#         self.cat1 = num2
#
#     def shut(self):
#         print('狗的叫声：汪汪汪', self.num1)
#         print('猫的叫声：喵喵喵', self.num2)
#
#     def eat(self):
#         print('狗爱吃的食物是骨头', self.num1)
#         print('猫爱吃的食物是鱼', self.num2)
#
# class Cat(animal):
#     pass
#
# class Dog(animal):
#     pass
#
#
#
# cat = Cat(1)
# cat.shut()
#
# dog = Dog(2)
# dog.shut()

# 这题有问题


# 1、面向对象三大特性是__封装____、___继承___、___多态___.

# 2、单例模式创建保证实例只创建___1___次.



if __name__ == "__main__":
    TheApp = 0